package com.smart.community.region.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.smart.community.region.entity.BuildingTypeCategory;
import com.smart.community.region.vo.BuildingTypeCategoryVO;

import java.util.List;

/**
 * 建筑类型基础分类Service接口
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 */
public interface IBuildingTypeCategoryService extends IService<BuildingTypeCategory> {

    /**
     * 获取划分方式列表
     * 
     * @return 划分方式列表
     */
    List<BuildingTypeCategoryVO> getDivisionList();

    /**
     * 根据划分方式获取类型列表
     * 
     * @param divisionId 划分方式ID
     * @return 类型列表
     */
    List<BuildingTypeCategoryVO> getTypeListByDivision(Long divisionId);

    /**
     * 根据ID列表获取类型详情
     * 
     * @param ids ID列表
     * @return 类型列表
     */
    List<BuildingTypeCategoryVO> getTypeListByIds(List<Long> ids);

    /**
     * 获取所有顶级分类（划分方式）
     * 
     * @return 顶级分类列表
     */
    List<BuildingTypeCategoryVO> getTopLevelCategories();

    /**
     * 根据分类类型获取分类列表
     * 
     * @param categoryType 分类类型
     * @return 分类列表
     */
    List<BuildingTypeCategoryVO> getCategoriesByType(String categoryType);

    /**
     * 根据划分方式获取分类列表
     * 
     * @param divisionType 划分方式
     * @return 分类列表
     */
    List<BuildingTypeCategoryVO> getCategoriesByDivisionType(String divisionType);

    /**
     * 获取分类树形结构
     * 
     * @return 分类树形结构
     */
    List<BuildingTypeCategoryVO> getCategoryTree();

    /**
     * 清除所有建筑类型缓存
     * 当建筑类型数据发生变更时调用
     * 
     * @throws Exception 清除缓存异常
     */
    void clearAllBuildingTypeCache() throws Exception;

    /**
     * 清除指定划分方式的建筑类型缓存
     * 
     * @param divisionId 划分方式ID
     * @throws Exception 清除缓存异常
     */
    void clearBuildingTypeCacheByDivision(Long divisionId) throws Exception;

    /**
     * 清除指定分类类型的建筑类型缓存
     * 
     * @param categoryType 分类类型
     * @throws Exception 清除缓存异常
     */
    void clearBuildingTypeCacheByCategoryType(String categoryType) throws Exception;
}
